// adapter/jsbridge-factory.js
class JSBridgeFactory {
  constructor() {
    this.adapters = new Map()
    this.currentAdapter = null
  }

  registerAdapter(name, adapter) {
    this.adapters.set(name, adapter)
  }

  detectEnvironment() {
    // const ua = navigator.userAgent.toLowerCase()//通常在前端开发中，userAgent 被用来识别浏览器和操作系统。

    // if (ua.includes('app1')) return 'app1'
    // if (ua.includes('app2')) return 'app2'
    // if (window.webkit && window.webkit.messageHandlers) return 'ios'
    // if (window.AndroidBridge) return 'android'

    return 'local_api'
  }

  createAdapter(env) {
    const AdapterClass = this.adapters.get(env)
    // this.currentAdapter = new AdapterClass()
    this.currentAdapter = AdapterClass
    return this.currentAdapter
  }

  getCurrentAdapter() {
    if (!this.currentAdapter) {
      const env = this.detectEnvironment()
      this.createAdapter(env)
    }
    return this.currentAdapter
  }
}

// // 基础适配器
// class BaseAdapter {
//   async invoke(method, params = {}) {
//     throw new Error('Method not implemented')
//   }

//   on(event, callback) {
//     throw new Error('Method not implemented')
//   }
// }

// // iOS适配器
// class IOSAdapter extends BaseAdapter {
//   async invoke(method, params = {}) {
//     return new Promise((resolve, reject) => {
//       const callbackId = `cb_${Date.now()}`

//       window[callbackId] = (result) => {
//         delete window[callbackId]
//         resolve(result)
//       }

//       try {
//         window.webkit.messageHandlers[method].postMessage({
//           ...params,
//           callbackId
//         })
//       } catch (error) {
//         reject(error)
//       }
//     })
//   }
// }

// // Android适配器
// class AndroidAdapter extends BaseAdapter {
//   async invoke(method, params = {}) {
//     return new Promise((resolve) => {
//       const jsonParams = JSON.stringify(params)
//       const result = window.AndroidBridge[method](jsonParams)
//       resolve(JSON.parse(result || '{}'))
//     })
//   }
// }

export const jsBridgeFactory = new JSBridgeFactory()